package de.schule.barnimgymnasium.autotransporter;

import java.util.ArrayList;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite;

import de.schule.barnimgymnasium.autotransporter.spiele.Spiel;
import de.schule.barnimgymnasium.autotransporter.spiele.SpielEventListener;
import de.schule.barnimgymnasium.autotransporter.spiele.SpielVerteiler;

public class Transporter extends GameItem {

	final int ANZAHL_STELLPLAETZE = 4;
	final int ANZAHL_SPIELE = 4;
	final int nummer; // Nummer an der Seite der Tür
	Stellplatz[] platz;
	Lautsprecher lautsprecher;
	Spiel aktuellesSpiel = null;
	Point mouseDownPosition;
	ArrayList<SnapPoint> snaps;
	SpielVerteiler spielverteiler;

	public Transporter(final Composite parent, final int x, final int y,
			final int nummer) {
		super(parent, x, y);
		this.nummer = nummer;
		final Image image = new Image(parent.getDisplay(), "./bilder/"
				+ GameArea.fotograf + "/Transporter.png");
		this.setImage(image);

		// img = new Image(parent.getDisplay(),
		// this.getClass().getResourceAsStream("Transporter.png"));

		this.lautsprecher = new Lautsprecher();
		spielverteiler = new SpielVerteiler(this);
		this.platz = new Stellplatz[this.ANZAHL_STELLPLAETZE];
		int i = 0;
		this.platz[i++] = new Stellplatz(location, new Point(110, -35));
		this.platz[i++] = new Stellplatz(location, new Point(220, -35));
		this.platz[i++] = new Stellplatz(location, new Point(110, -90));
		this.platz[i++] = new Stellplatz(location, new Point(220, -90));

		this.snaps = new ArrayList<SnapPoint>(this.platz.length);
		for (i = 0; i < this.platz.length; i++) {
			this.snaps.add(platz[i].getSnap());
			platz[i].registerSpielEventListener(spielverteiler);
		}
		this.updateSnapLocations();

	}

	public ArrayList<SnapPoint> getSnapPoints() {
		return this.snaps;
	}

	private void updateSnapLocations() {
		for (int i = 0; i < this.platz.length; i++) {
			platz[i].updateSnap();
		}
	}

	@Override
	public boolean mouseMove(final MouseEvent e) {
		if (super.mouseMove(e)) {
			this.updateSnapLocations();
			return true;
		}
		return false;
	}

	@Override
	public void setImage(final Image image) {
		final GC gc = new GC(image);
		gc.setForeground(this.parent.getDisplay().getSystemColor(SWT.COLOR_RED));
		gc.drawText(Integer.valueOf(this.nummer).toString(), 72, 54, true);
		gc.dispose();
		super.setImage(image);
	}

	public Lautsprecher getLautsprecher() {
		return this.lautsprecher;
	}

	public Stellplatz[] getStellplaetze() {
		return this.platz;
	}

	public SpielEventListener getSpielEventListener() {
		return spielverteiler;
	}

	public int getNummer() {
		return nummer;
	}
}